/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package com.serviportales.contactenos.managers;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.serviportales.contactenos.dao.MotivoContactoDAO;
import com.serviportales.contactenos.datatypes.DataTypesRef;
import com.serviportales.contactenos.datatypes.EstadoRegistro;
import com.serviportales.contactenos.exception.ContactenosException;
import com.serviportales.contactenos.model.MotivoContacto;
import com.serviportales.serviportales.exceptions.ServiportalesException;
import com.serviportales.serviportales.model.DataTypesBeans;
import com.serviportales.serviportales.utils.BeansUtils;

@Service
@Transactional(rollbackFor = { ContactenosException.class })
public class MgrMotivoContacto {
	@Autowired
	private MotivoContactoDAO motivoContactoDAO;
	@Autowired
	private MessageSource messageSource;

	public void grabarMotivoContacto(MotivoContacto motivoContacto) throws ContactenosException {
		try {
			MotivoContacto motivoContactoFilter = motivoContactoDAO.selectByID(motivoContacto.getCodigo());
			if (motivoContactoFilter != null) {
				motivoContactoFilter.setDescripcion(motivoContacto.getDescripcion());
				motivoContactoFilter.setEstadoRegistro(motivoContacto.getEstadoRegistro());
				motivoContactoFilter.setNombre(motivoContacto.getNombre());

				BeansUtils.validateBean(motivoContactoFilter, messageSource);
				motivoContactoDAO.update(motivoContactoFilter);
			} else {

				BeansUtils.validateBean(motivoContacto, messageSource);
				motivoContactoDAO.insert(motivoContacto);
			}
		} catch (ServiportalesException e) {
			throw new ContactenosException(e.getMessage());
		} catch (Exception exception) {
			throw new ContactenosException(messageSource.getMessage(ContactenosException.GRABAR_ERROR, new String[] { exception.getMessage() }, LocaleContextHolder.getLocale()), exception);
		}
	}

	public List<MotivoContacto> getActiveMotivosContacto() throws ContactenosException {
		try {
			MotivoContacto motivoContacto = new MotivoContacto();
			motivoContacto.setEstadoRegistro(DataTypesBeans.getInstance().getBeanById(EstadoRegistro.class, DataTypesRef.ESTADO_REGISTRO_ACTIVO));
			return motivoContactoDAO.select(motivoContacto);
		} catch (Exception exception) {
			throw new ContactenosException(messageSource.getMessage(ContactenosException.BUSCAR_ERROR, new String[] { exception.getMessage() }, LocaleContextHolder.getLocale()), exception);
		}
	}

	public List<MotivoContacto> buscarMotivoContacto(MotivoContacto motivoContacto) throws ContactenosException {
		try {
			return motivoContactoDAO.select(motivoContacto);
		} catch (Exception exception) {
			throw new ContactenosException(messageSource.getMessage(ContactenosException.BUSCAR_ERROR, new String[] { exception.getMessage() }, LocaleContextHolder.getLocale()), exception);
		}
	}

	public List<MotivoContacto> buscarMotivoContacto(MotivoContacto motivoContacto, int maxResult) throws ContactenosException {
		try {
			return motivoContactoDAO.select(motivoContacto, 0, maxResult);
		} catch (Exception exception) {
			throw new ContactenosException(messageSource.getMessage(ContactenosException.BUSCAR_ERROR, new String[] { exception.getMessage() }, LocaleContextHolder.getLocale()), exception);
		}
	}
}
